﻿using System;
using System.Collections.Generic;
using System.Linq;
using SIM.Geo.DA;
using SIM.Geo.BE;


namespace SIM.Geo.BL
{
    public class BLTomadorMuestra
    {
        #region Metodos
        /// <summary>
        /// Método listar tomador muestra
        /// </summary>
        /// <returns></returns>
        public List<TomadorMuestra> ListarTomadorMuestra()
        {
            return Accesor.ListarTomadorMuestra();
        }
        /// <summary>
        /// Método insertar un nuevo tomador muestra
        /// </summary>
        /// <param name="tomadormuestra"></param>
        /// <returns></returns>
        public int InsertarTomadorMuestra(TomadorMuestra tomadormuestra)
        {
            int codigoNuevo = this.GenerarCodigoTomadorMuestra() + 1;
            tomadormuestra.CodigoTomadorMuestra = codigoNuevo;
            return Accesor.InsertarTomadorMuestra(tomadormuestra);
        }
        /// <summary>
        /// Método que modifica tomador muestra
        /// </summary>
        /// <param name="tomadormuestra"></param>
        public void ModificarTomadorMuestra(TomadorMuestra tomadormuestra)
        {
            var tomadormuestraEdit = Accesor.ObtenerTomadorMuestra(tomadormuestra.CodigoTomadorMuestra);
            tomadormuestraEdit.Nombres = tomadormuestra.Nombres;
            tomadormuestraEdit.ApellidoPaterno = tomadormuestra.ApellidoPaterno;
            tomadormuestraEdit.ApellidoMaterno = tomadormuestra.ApellidoMaterno;
            tomadormuestraEdit.CodigoTrabajador = tomadormuestra.CodigoTrabajador;
            Accesor.ModificarTomadorMuestra(tomadormuestra);
        }
        /// <summary>
        /// Método eliminar tomador muestra
        /// </summary>
        /// <param name="codigoTomadorMuestra"></param>
        public void EliminarTomadorMuestra(int codigoTomadorMuestra)
        {
            var tomadormuestra = Accesor.ObtenerTomadorMuestra(codigoTomadorMuestra);
            Accesor.EliminarTomadorMuestra(tomadormuestra);
        }
        /// <summary>
        /// Método buscar un tomador de muestra por nombre
        /// </summary>
        /// <param name="nombre"></param>
        /// <returns></returns>
        public List<TomadorMuestra> BuscarTomadorMuestra(string nombre)
        {
            return Accesor.BuscarTomadorMuestra(nombre);
        }
        /// <summary>
        /// Método obtener tomador muestra por codigo
        /// </summary>
        /// <param name="codigoTomadorMuestra"></param>
        /// <returns></returns>
        public TomadorMuestra ObtenerTomadorMuestra(int codigoTomadorMuestra)
        {
            return Accesor.ObtenerTomadorMuestra(codigoTomadorMuestra);
        }
        /// <summary>
        /// Devuelve la lista para ComboBox, DropdownList, devuelve campos Value y Text
        /// </summary>
        /// <returns></returns>
        public List<ListItemInt> ObtenerListItem()
        {
            var result = Accesor.ListarTomadorMuestra();
            return result.Select(x => new ListItemInt
            {
                Value = x.CodigoTomadorMuestra,
                Text = x.Nombres + " " +x.ApellidoPaterno + " " + x.ApellidoMaterno
            }
            ).OrderBy(x => x.Text).ToList();
        }

        /// <summary>
        /// Método obtiene tomador muestra por codigo de trabajador
        /// </summary>
        /// <param name="codigoTomadorMuestra"></param>
        /// <returns></returns>
        public TomadorMuestra ObtenerTomadorMuestraPorCodigoTrabajador(string codigoTrabajador)
        {
            return Accesor.ObtenerTomadorMuestraPorCodigoTrabajador(codigoTrabajador);
        }
        #endregion
        
        #region Utilidades
        /// <summary>
        /// Método que genera codigo tomador muestra
        /// </summary>
        /// <returns></returns>
        public int GenerarCodigoTomadorMuestra()
        {
            int codigoMaximo = 1;
            var lista = Accesor.ListarTomadorMuestra();
            if (lista.Count > 0)
            {
                codigoMaximo = lista.OrderByDescending(x => x.CodigoTomadorMuestra).FirstOrDefault().CodigoTomadorMuestra + 1;
            }
            return codigoMaximo;
        }
        #endregion
        #region Accesor
        private static DATomadorMuestra Accesor
        {
            [System.Diagnostics.DebuggerStepThrough]
            get { return new DATomadorMuestra(); }
        }
        #endregion
    }
}
